package openai

import (
	"regexp"
	"strings"
)

// ChatResponse 响应结构体（根据实际 API 响应格式调整）
type ChatResponse struct {
	ID      string `json:"id"`
	Object  string `json:"object"`
	Created int64  `json:"created"`
	Choices []struct {
		Message struct {
			Role    string `json:"role"`
			Content string `json:"content"`
		} `json:"message"`
		FinishReason string `json:"finish_reason"`
	} `json:"choices"`
	Usage struct {
		PromptTokens     int `json:"prompt_tokens"`
		CompletionTokens int `json:"completion_tokens"`
		TotalTokens      int `json:"total_tokens"`
	} `json:"usage"`
}

func (cr *ChatResponse) extractContent() (string, string) {
	if len(cr.Choices) == 0 {
		return "", ""
	}
	content := cr.Choices[0].Message.Content
	if len(content) == 0 {
		return "", ""
	}
	// 匹配 <think> ... </think> 中的内容
	reThink := regexp.MustCompile(`(?ims)<think>(.*?)</think>`)
	matchThink := reThink.FindStringSubmatch(content)

	// 提取 think 部分
	if len(matchThink) > 1 {
		thinking := matchThink[1]

		// 去除非想部分的内容
		result := reThink.ReplaceAll([]byte(content), []byte(""))
		return thinking, string(result)
	}

	// 如果没有找到 think 部分，则认为整个内容都是结果
	return "", content
}

func (cr *ChatResponse) Think() string {
	think, _ := cr.extractContent()
	return strings.TrimSpace(think)
}

func (cr *ChatResponse) Message() string {
	_, message := cr.extractContent()
	return strings.TrimSpace(message)
}

// ChatResponseStream 流式响应数据结构（根据 API 实际格式调整）
